CI/CD 工具 Jenkins 的基本使用(Hexo 为例)

作者 Marlous 日期 2019-03-17
CI/CD 工具 Jenkins 的基本使用(Hexo 为例)

参考:
1、 [小题大做] Github + Jenkins 实现自动化部署 hexo 博客静态文件
2、 ubuntu搭建Jenkins自动化部署服务

一 概述

  • 示例:
    Hexo 的 CI/CD 持续集成和部署:把 nodejs 环境、Git、Jenkins 打包成 docker 镜像,然后在 VPS 上跑个容器,用 volumes 做数据持久化来保存部分配置。/ 本地只维护一个博文仓库,push 到远端仓库,触发 webhook 后,Jenkins 拉完博文执行脚本进行构建,网站根目录设置成 hexo/public 即可。

  • 过程:
    本地博文仓库 -> GitHub 远程博文仓库 -> GitHub 的 webhook 发消息给自己服务器上的 Jenkins -> Jenkins 收到消息,自动拉取 Github 仓库代码,并执行脚本。

二 使用前准备

  • 服务器已经装好所有环境。

  • 服务器配置好了自己喜欢的博客主题。

  • 服务器配置好了自己的 Git。

  • 服务器 /var/www/hexo/source/_post 目录已经初始化了仓库,与 GitHub 上博文仓库关联,可以正常拉取到博文。

三 Jenkins 的使用

Jenkins 负责从博文仓库拉完博文、执行脚本进行构建。

  1. 安装基础插件等:
  • 浏览器访问:公网ip:8080。

  • 容器中访问提示的目录,复制填写初始密码(admin,vim /var/lib/jenkins/secrets/initialAdminPassword)。并选择安装推荐的插件。/ 使用管理员账号。
    容器中访问提示的目录

  • 出现空白页。解决:http://ip:8080/pluginManager/advanced 将升级站点下的 url 改为 http。/ 重新浏览器访问:公网ip:8080。
    出现空白页
    完成,进行配置

  1. 进行配置:
  • 创建一个新任务:
    创建一个新任务

  • 配置密钥,给 Jenkins 添加私钥(如果访问的仓库是公开的则不需要添加私钥)。仓库是所要拉取的仓库地址 ssh 方式克隆的地址(存放博文的仓库)。
    配置密钥
    配置密钥

  • 在 GitHub 上设置 webhook:
    在 GitHub 上设置 webhook
    在 GitHub 上设置 webhook
    在 GitHub 上设置 webhook

  • 配置之前创建的 job:
    配置之前创建的 job

  • 在构建中写 Jenkins 收到 GitHub 仓库变动后需要执行的脚本:
    需要执行的脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /*
    执行的脚本
    */

    #!/bin/bash
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin
    cd /var/www/hexo/source/_posts
    git pull origin master
    cd /var/www/hexo
    hexo clean
    hexo g

四 Jenkins 调试

  • 在本地文章仓库修改一下文章,推送到 GitHub。然后看 Jenkins 状态、最终网站对应博文是否变化。

  • 查看日志查错:
    查看日志

  • 错误原因:Jenkins 的权限问题,把它加入到 root 身份。成功!

    1
    2
    3
    4
    5
    gpasswd -a root jenkins

    vim /etc/default/jenkins // JENKINS_USER="root" JENKINS_GROUP="root"

    service jenkins restart